home *** CD-ROM | disk | FTP | other *** search
Modula Definition | 1997-10-26 | 19.2 KB | 460 lines |
- DEFINITION MODULE SEProto;
- (*
- Gruppe: Persnliche
- ID: P50793@HH
- Wg.: SE-Protokol
- Von: Christian Felsch @ HH (Do, 01.02.96 17:41)
- An: Dirk Steins @ K2
- MId: 199602011741.p50793@hh.maus.de
-
-
- Hallo Dirk!
-
- In Absprache mit Frank Schramm @ HH2 habe ich folgende Erweiterungen fr das
- SE-Protokol vorzuschlagen:
-
- SEPROTOVERSION 0x101
-
- SE_CLOSE
- msg[3,4] = Zeiger auf Name oder Maske der Dateien, die geschlossen
- werden sollen.
- msg[5] = Flag
- 0: Datei[en] nur sichern.
- 1: Datei[en] sichern und schlieen.
-
- SE_PROJECT,
- ES_PROJECT
- msg[3,4] = Zeiger auf Dateiname oder NULL, damit man ein Projekt
- abmelden kann.
-
-
- Die PC-Shell von Frank und qed werden diese Erweiterungen benutzen, sind aber
- durch die Kontrolle der Protokol-Version selbstverstndlich kompatibel zur
- Version 1.00.
- Wir wrden es begen, wenn Du die nderungen in das offizielle SE-Protokol
- bernimmst!
-
- Noch eine andere Frage: sollte ein Programm eigentlich zwingend auf die
- Besttigung eines Kommandos warten? qed macht das z.Zt. so, da er nach dem
- Abschicken eines SE-Kommandos ein Timerevent einklinkt und eine bestimmte Zeit
- auf den SE_ACK wartet. Wenn er nicht kommt, meldet qed das und vergit die
- Shell als Kommunikationspartner.
- Das Problem tritt immer dann auf, wenn die Shell gerade beschftigt ist (z.B.
- mit dem Compiler) und der Editor schickt erneut etwas.
-
- Chris.
- *)
- (*
- An: Dirk Steins @ K2
- MId: 199607210940.p60841@hh.maus.de
- Hierzu gibt es einen Kommentar
-
-
- Hallo Dirk!
-
- Dirk Haun und ich denken gerade mal wieder ber ein paar nderungen und
- Erweiterungen am SE-Protokol nach:
-
- Ich habe eine Nachricht definiert, in der ein Array mit den Texten bergeben
- wird, die der Editor in sein SE-Men eintrgt. Bisher stand bei qed immer
- 'Compiler', 'Make' usw. Fr eine TeX-Shell wre es aber schn, wenn dort
- 'LaTeX', 'DVI ansehen' usw. stehen wrde. Ich habe mal testweise folgende neue
- Nachricht in qed und meine TeX-Shell eingebaut:
-
- #define SE_MENU 0x4210
- /* Die Shell teilte dem Editor mit, was er fr die einzelnen Programme
- * in sein Men eintragen soll.
- * Ein Element darf auch NULL sein.
- * Word 3+4: Ein Zeiger auf die Stuktur mit den Eintrgen.
- * Mit ES_ACK besttigt der Editor die Meldung.
- */
-
- typedef struct
- {
- UBYTE *compStr;
- UBYTE *makeStr;
- UBYTE *makeAllStr;
- UBYTE *linkStr;
- UBYTE *execStr;
- UBYTE *makeexecStr;
- } SEMENUINFO;
-
- Auerdem wre es sinnvoll, wenn man optional beim SE_OPEN eine Cursorposition
- angeben knnte. Die Daten dafr passen gerade noch in das Array:
- Word 5+6 LONG fr die Zeilennummer
- Word 7 WORD fr die Spaltennummer
-
- Was meinst Du zu den beiden Punkten?
-
- *)
-
- (* SE-Protokoll zur Kommunikation zwischen Shells zur Programmentwicklung
- * und Editoren.
- *
- * Dieses Protokoll dient dazu, unter Multitasking-Systemen die Shell
- * zur Compilierung und hnlichen Sachen zu veranlassen, und um Fehler-
- * meldungen und/oder Fehlerdateien an den Editor zurckzugeben.
- *
- * Kommandos bzw. Nachrichten von der Shell zum Editor beginnen
- * mit SE_, Nachrichten vom Editor zur Shell beginnen mit ES_
- *
- * Da teilweise Zeiger auf Speicherbereiche bergeben werden, ist vom
- * jeweiligen Absender der Nachricht darauf zu achten, da diese
- * Speicherbereiche vom Empfnger auch lesbar sind (Memory Protection!).
- * Dafr sind diese als Readable zu allozieren!
- *
- * Version Datum nderungen
- * =====================================================================
- * 0.1 10.1.94 Erster Entwurf
- * 0.2 17.1.94 SE_TERMINATE hinzugefgt
- * 0.3 25.1.94 SE_CLOSE hinzugefgt.
- * tErrInfo gendert, SE_ERROR gendert
- * tShellCommands und tEditCommands korrigiert
- * 0.4 21.8.96 Erweitert auf Version SEPROTOVERSION 102
- *)
-
- (*
- EXPORT SE_INIT, SE_OK, SE_ACK, SE_OPEN, SE_ERROR, SE_ERRFILE, SE_PROJECT,
- SE_QUIT, SE_TERMINATE, SE_CLOSE,
- ES_INIT, ES_OK, ES_ACK, ES_COMPILE, ES_MAKE, ES_MAKEALL, ES_LINK,
- ES_EXEC, ES_MAKEEXEC, ES_PROJECT, ES_QUIT,
- SEPROTOVERSION,
- tShellCommands, tEditCommands, tShellSet, tEditSet,
- tPtrString, LONGBITSET,
- tErrInfo, tPtrErrInfo, tMessRec, tPtrMessRec;
- *)
-
- CONST
-
- SE_INIT = 4200H;
- (* Die Shell fragt an, ob ein Editor das SE-Protokoll
- * versteht.
- * Wort 3: Ein Bitset, welche Nachrichten die Shell versendet
- * Wort 4+5: Ein Bitset, welche Editorkommandos verstanden werden
- * Wort 6: Untersttze Versionsnummer des Protokolls
- * Als Antwort erhlt es ein ES_OK vom Editor.
- *)
- SE_OK = 4201H;
- (* Die Shell sagt dem Editor, das sie das Protokoll
- * versteht.
- * Wort 3: Ein Bitset, welche Nachrichten die Shell versendet
- * Wort 4+5: Ein Bitset, welche Editorkommandos verstanden werden
- * Wort 6: Untersttze Versionsnummer des Protokolls
- * Wort 7: Die ApId des Programmes, dessen Nachricht beantwortet wird
- *)
- SE_ACK = 4202H;
- (* Die Shell besttigt den Empfang eines Editorkommandos und gibt zurck,
- * ob das Kommando ausgefhrt wird.
- * Wort 3: TRUE: Kommando wird verstanden und ausgefhrt.
- * FALSE: Das Kommando wird nicht verstanden
- * Eine SE_ACK mit TRUE sagt nichts darber aus, ob das Kommando erfolg-
- * reich ausgefhrt wurde. Es sagt nur, da die Shell das Kommando
- * versteht und ausfhren wird!
- *)
- SE_OPEN = 4203H;
- (* Die Shell sagt dem Editor, da er einen Text ffnen
- * soll. Als Antwort erhlt die Shell ein ES_ACK
- * Wort 3+4: Ein Zeiger auf den Filenamen des zu ffnenden Files
- *)
- SE_ERROR = 4204H;
- (* Es ist ein Fehler beim Compilieren aufgetreten.
- * Wort 3+4: Ein Zeiger auf eine Infostruktur, die wie folgt
- * aufgebaut ist:
- * Wort 0+1: Ein Zeiger auf den Namen des compilierten Textes.
- * Wort 2+3: Ein Zeiger auf den Text der Fehlermeldung
- * Wort 4 : Die Fehlernummer
- * Mit ES_ACK besttigt der Editor die Meldung.
- *)
- SE_ERRFILE = 4205H;
- (* Es sind Fehler aufgetreten. Die Fehlermeldungen stehen in einem
- * Errorfile, welches in der Message spezifiziert wird.
- * Wort 3+4: Ein Zeiger auf den Filenamen des Errorfiles mit den
- * Fehlermeldungen
- * Wort 5+6: Ein Zeiger auf den Namen des compilierten Textes
- * Mit ES_ACK besttigt der Editor die Meldung.
- *)
- SE_PROJECT = 4206H;
- (* Die Shell teilt dem Editor mit, da das Projekt
- * gendert wurde. Der Filename des aktuellen
- * Projektfiles wird als Parameter bergeben
- * Wort 3+4: Ein Zeiger auf den Namen des Projektfiles
- * Der Editor besttigt mit ES_ACK.
- * Eine vernnftige Reaktion des Editors wre es in dem Fall,
- * ebenfalls das Projekt zu wechseln, sofern er diese untersttzt.
- *)
- SE_QUIT = 4207H;
- (* Die Shell teilt dem Editor mit, da sie jetzt beendet wird.
- * Der Editor sollte in dem Fall die Shell als Kommunikationspartner
- * vergessen.
- * Parameter gibt es keine.
- * Es wird keine Antwort erwartet!
- *)
- SE_TERMINATE = 4208H;
- (* Die Shell teilt dem Editor mit, da dieser sich beenden soll.
- * Der Editor sollte in dem Fall sich selbst beenden und seinen ganz
- * normalen Terminierungsproze durchlaufen (und in dem auch ein ES_QUIT
- * schicken!). Der Grund fr so eine Meldung der Shell knnte zum Beispiel
- * zu wenig Speicher zum compilieren sein.
- * Mit ES_ACK besttigt der Editor die Meldung.
- *)
- SE_CLOSE = 4209H;
- (* Die Shell teilt dem Editor mit, da dieser alle Texte sichern soll.
- * Der Editor sollte bei genderten Texten vorher nachfragen.
- * Mit ES_ACK besttigt der Editor die Meldung.
- *)
-
- SE_MENU = 4210H;
- (* Die Shell teilte dem Editor mit, was er fr die einzelnen Programme
- * in sein Men eintragen soll.
- * Ein Element darf auch NULL sein.
- * Word 3+4: Ein Zeiger auf die Stuktur mit den Eintrgen.
- * Mit ES_ACK besttigt der Editor die Meldung.
- *)
-
- ES_INIT = 4240H;
- (* Ein Editor fragt an, ob eine Shell das SE-Protokoll versteht.
- * Wort 3: Ein Bitset, welche Shellnachrichten verstanden werden
- * Wort 4+5: Ein Bitset, welche Editorkommandos versendet werden
- * Wort 6: Untersttze Versionsnummer des Protokolls
- * Als Antwort erhlt es SE_OK von der Shell
- *)
- ES_OK = 4241H;
- (* Der Editor beantwortet die Anfrage der Shell nach dem Protokoll.
- * Wort 3: Ein Bitset, welche Shellnachrichten verstanden werden
- * Wort 4+5: Ein Bitset, welche Editorkommandos versendet werden
- * Wort 6: Untersttze Versionsnummer des Protokolls
- * Wort 7: Die ApId des Programmes, dessen Nachricht beantwortet wird
- *)
- ES_ACK = 4242H;
- (* Der Editor besttigt den Empfang des Kommandos
- * Wort 3: TRUE: Kommando wird verstanden und ausgefhrt.
- * FALSE: Das Kommando wird nicht verstanden
- * Eine ES_ACK mit TRUE sagt nichts darber aus, ob das Kommando erfolg-
- * reich ausgefhrt wurde. Es sagt nur, da der Editor das Kommando
- * versteht und ausfhren wird!
- *)
- ES_COMPILE = 4243H;
- (* Der Editor sagt der Shell, da sie ein File bersetzen soll.
- * Ein Pointer auf den Dateinamen wird in der Message bergeben.
- * Wort 3+4: Zeiger auf den Namen der zu compilierenden Datei.
- * Diese Nachricht mu mit SE_ACK besttigt werden.
- *)
- ES_MAKE = 4244H;
- (* Der Editor sagt der Shell, da sie ein Make ausfhren soll.
- * Ein Filename kann in der Message bergeben werden, mu aber
- * nicht gesetzt sein und mu von der Shell auch nicht beachtet
- * werden!
- * Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL)
- * Die Shell besttigt mit SE_ACK.
- *)
- ES_MAKEALL = 4245H;
- (* Der Editor sagt der Shell, da ein komplettes Make All ausgefhrt
- * werden soll. Ein Filename fr das Makefile kann (mu nicht) in
- * der Message bergeben werden.
- * Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL)
- * Die Shell besttigt mit SE_ACK.
- *)
- ES_LINK = 4246H;
- (* Der Editor sagt der Shell, da das Programm
- * gelinkt werden soll. Ein Filename kann
- * in der Message bergeben werden, mu aber
- * nicht unbedingt beachtet werden von der Shell!
- * Wort 3+4: Zeiger auf den Namen der Source, die gelinkt werden soll
- * (oder NULL)
- * Die Shell besttigt mit SE_ACK.
- *)
- ES_EXEC = 4247H;
- (* Der Editor sagt der Shell, da das Programm
- * zu der Source ausgefhrt werden soll. Ein
- * Filename kann bergeben werden, mu von der
- * Shell aber nicht beachtet werden.
- * Wort 3+4: Zeiger auf den Namen des auszufhrenden Files (oder NULL)
- * Bei einer Sourcedatei ist diese ggf. noch zu
- * compilieren und/oder zu linken
- * Die Shell besttigt mit SE_ACK.
- *)
- ES_MAKEEXEC = 4248H;
- (* Die Shell soll ein Make ausfhren und danach das Programm ausfhren.
- * Ein Filename fr das Makefile kann (mu nicht) in der Message
- * bergeben werden.
- * Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL)
- * Die Shell besttigt mit SE_ACK.
- *)
- ES_PROJECT = 4249H;
- (* Der Editor teilt der Shell mit, da das Project
- * gendert/gewechselt wurde. Der Filename des
- * Projektfiles wird als Parameter in der Message
- * bergeben.
- * Wort 3+4: Zeiger auf den Namen des Projektfiles
- * Die Shell besttigt mit SE_ACK.
- * Eine vernnftige Reaktion der Shell wre in dem Fall, ebenfalls
- * das Projekt zu wechseln, sofern es diese untersttzt.
- *)
- ES_QUIT = 424AH;
- (* Der Editor teilt der Shell mit, da er jetzt beendet wird.
- * Die Shell sollte in dem Fall den Editor als Kommunikationspartner
- * vergessen.
- * Parameter gibt es keine.
- * Es wird keine Antwort erwartet!
- *)
-
- SE_DATA = 0;
- (* Nur fr Typdeklaration benutzt, eigentlich berflssig
- *)
-
- SEPROTOVERSION = 102H; (* Die Versionsnummer des Protokolls.
- * Highbyte ist die Major Number
- * Lowbyte ist die Lower Number
- *)
-
- (* Typdefinitionen fr die Nachrichten
- *)
-
- (* Dies definiert die einzelnen Bits, welche Nachrichten untersttzt werden
- *)
- TYPE tShellCommands = (seInit, seOk, seAck, seOpen, seError, seErrfile,
- seProject, seQuit, seTerminate, seClose);
-
- tEditCommands = (esInit, esOk, esAck, esCompile, esMake, esMakeall,
- esLink, esExec, esMakeexec, esProject, esQuit, res11,
- res12, res13, res14, res15, res16, res17, res18,
- res19, res20, res21, res22, res23, res24, res25,
- res26, res27, res28, res29, res30, res31);
-
- tShellSet = SET OF tShellCommands;
-
- tEditSet = SET OF tEditCommands;
-
- tString = ARRAY [0..255] OF CHAR;
-
- tPtrString = POINTER TO ARRAY [0..255] OF CHAR;
- (* Zeiger auf einen nullterminierten String
- *)
-
- LONGBITSET = SET OF [0..31];
- (* Leider kennt das nicht jeder Compiler
- *)
-
- tErrInfo = RECORD
- errFile : tPtrString;
- (* Zeiger auf den Namen der compilierten Datei
- *)
- errMess : tPtrString;
- (* Zeiger auf die Fehlermeldung
- *)
- errNum : INTEGER;
- (* Die Fehlernummer
- *)
- errLine : LONGINT;
- (* Die fehlerhafte Zeile
- *)
- errRow : INTEGER;
- (* Die Spalte mit dem Fehler (oder 0)
- *)
- END;
- tPtrErrInfo = POINTER TO tErrInfo;
-
- tMenuInfo = RECORD
- compStr : tPtrString;
- makeStr : tPtrString;
- makeAllStr : tPtrString;
- linkStr : tPtrString;
- execStr : tPtrString;
- makeExecStr : tPtrString;
- END;
- tPtrMenuInfo= POINTER TO tMenuInfo;
-
- (* ber diese Recorddefinition kann man alle
- * Messages des Protokolls behandeln
- *)
-
- tMessRec = RECORD
- msg : INTEGER;
- (* Messagenummer, Wort 0 *)
- apId : INTEGER;
- (* Applikation ID des Senders, Wort 1 *)
- overLen : INTEGER;
- (* berlnge der Nachricht (immer 0 fr SE-Protokoll),
- * Wort 2 *)
- CASE : CARDINAL OF
- SE_INIT,
- ES_INIT : shellBits: tShellSet;
- (* Bits, die angeben, welche Shell-Nachrichten
- * untersttzt werden (Wort 3)
- *)
- editBits : tEditSet;
- (* Bits, die angeben, welche Editor-Nachrichten
- * untersttzt werden (Worte 4 und 5)
- *)
- version : CARDINAL;
- (* Untersttze Versionsnummer des Protokolls
- * Aktuell: $100
- *)
- | SE_OK,
- ES_OK : okShellBits: tShellSet;
- (* Bits, die angeben, welche Shell-Nachrichten
- * untersttzt werden (Wort 3)
- *)
- okEditBits : tEditSet;
- (* Bits, die angeben, welche Editor-Nachrichten
- * untersttzt werden (Worte 4 und 5)
- *)
- okVersion: CARDINAL;
- (* Untersttze Versionsnummer des Antwortenden
- * Aktuell: $100
- *)
- otherId : INTEGER;
- (* Die ApId des Senders, auf das dies eine Antwort
- * ist (Wort 7)
- *)
- | SE_ACK,
- ES_ACK : acknowledge: BOOLEAN;
- (* TRUE: Kommando wurde akzeptiert,
- * FALSE: Kommando konnte nicht ausgefhrt werden
- *)
- | SE_OPEN : namePtr : tPtrString;
- iLineNum : LONGINT;
- iColNum : INTEGER;
- (* Zeiger auf den Namen des zu ladenden Textes
- * (Worte 3 und 4)
- * Worte 5 und 6: Zeilennummer mit Position zum ffnen
- * Wort 7: Spaltennummer
- *)
- | SE_ERROR : errorPtr : tPtrErrInfo;
- (* Zeiger auf Speicherbereich, der die Fehlermeldung
- * spezifiziert.
- *)
- | SE_MENU : menuInfoPtr: tPtrMenuInfo;
- (* Zeiger auf Speicherbereich mit Menuinformationen
- *)
- | SE_ERRFILE : errPtr : tPtrString;
- (* Zeiger auf den Namen des Errorfiles *)
- fnamePtr : tPtrString;
- (* Zeiger auf den Namen der compilierten Datei *)
- | SE_PROJECT,
- ES_COMPILE,
- ES_MAKE,
- ES_MAKEALL,
- ES_LINK,
- ES_EXEC,
- ES_MAKEEXEC,
- ES_PROJECT : filePtr : tPtrString;
- (* Zeiger auf den Filenamen des Files, welches
- * behandelt werden soll
- *)
- | SE_QUIT,
- SE_TERMINATE,
- SE_CLOSE,
- ES_QUIT,
- SE_DATA: data : ARRAY [0..4] OF INTEGER;
- (* Definition fr Maximallnge des Records
- *)
- END;
- END;
-
- tPtrMessRec = POINTER TO tMessRec;
- (* Ein Zeiger auf diese Messageblock
- *)
-
- END SEProto.
-